﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace UI.Desktop
{
    public partial class frmAltaPaciente : Form
    {
        bool incorrecto = false;
        Business.Entities.Paciente enCliPub = new Business.Entities.Paciente();
        private DataSet numProvincia;
        public bool cambios = false;
        string numprov = null;
        string numciudad;

        public frmPrincipal frmPrincipal { get; set; }

        public frmAltaPaciente()
        {
            InitializeComponent();
            
            Business.Entities.Paciente provi = new Business.Entities.Paciente();
            DataSet dsProv = new DataSet();
            dsProv = provi.ObtenerListaProvincias();
            numProvincia = new DataSet();
            numProvincia = dsProv;
        }

        private void loadProvincias()
        {
            Business.Entities.Paciente provincia = new Business.Entities.Paciente();
            DataSet dsProv = new DataSet();
            dsProv = provincia.ObtenerListaProvincias();
            ObtenerProvincias(dsProv);
        }

        #region ERROR PROVIDER

        private void txtDNI_Leave(object sender, EventArgs e)
        {
            if (!Regex.Match(txtDNI.Text, @"^((\d{8})|(\d{8}))$").Success)
            {
                errorProvider1.SetError(txtDNI, "DNI incorrecto, formato correcto: 00000000");
                incorrecto = true;
            }
            else { errorProvider1.SetError(txtDNI, ""); incorrecto = false; }
        }

        private void txtNombre_Leave(object sender, EventArgs e)
        {
            if (!Regex.Match(txtNombre.Text, @"^[A-Za-zñÑáéíóúÁÉÍÓÚçÇ\s]{3,30}$").Success)
            {
                errorProvider1.SetError(txtNombre, "Nombre incorrecto");
                incorrecto = true;
            }
            else { errorProvider1.SetError(txtNombre, ""); incorrecto = false; }
        }

        private void txtApellidos_Leave(object sender, EventArgs e)
        {
            if (!Regex.Match(txtApellidos.Text, @"^[A-Za-zñÑáéíóúÁÉÍÓÚçÇ\s]{3,40}$").Success)
            {
                errorProvider1.SetError(txtApellidos, "Apellidos incorrectos, caracteres invalidos");
                incorrecto = true;
            }
            else { errorProvider1.SetError(txtApellidos, ""); incorrecto = false; }
        }

        private void txtTelefono_Leave(object sender, EventArgs e)
        {
            if (!Regex.Match(txtTelefono.Text, @"^[0-9]{10}$").Success)
            {
                errorProvider1.SetError(txtTelefono, "Telefono incorrecto, caracteres invalidos");
                incorrecto = true;
            }
            else { errorProvider1.SetError(txtTelefono, ""); incorrecto = false; }
        }

        private void txtEmail_Leave(object sender, EventArgs e)
        {
            if (txtEmail.Text == "") errorProvider1.SetError(txtEmail, "");
            else if (!Regex.Match(txtEmail.Text, @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$").Success)
            {
                errorProvider1.SetError(txtEmail, "Email incorrectos, caracteres invalidos");
                incorrecto = true;
            }
            else { errorProvider1.SetError(txtEmail, ""); incorrecto = false; }
        }

        private void txtDireccion_Leave(object sender, EventArgs e)
        {/*
            if (!Regex.Match(txtDireccion.Text, @"^[A-Za-zñÑáéíóúÁÉÍÓÚçÇ\s]+[(0-9){5}]{3,50}$").Success)
            {
                errorProvider1.SetError(txtDireccion, "Dirección incorrecta, caracteres invalidos");
                incorrecto = true;
            }
            else { errorProvider1.SetError(txtDireccion, ""); incorrecto = false; }
       */ }

        #endregion
                
        #region BOTON GUARDAR
        
        private void btnGuardarCliente_Click(object sender, EventArgs e)
        {
            if (txtDNI.Text == "" || txtNombre.Text == "" || txtApellidos.Text == "" || txtTelefono.Text == "" ||
                 txtEmail.Text == "" || txtDireccion.Text == "" || (cbProvincia.SelectedIndex == 1) ||
                (rdbMasculino.Checked == false && rdbFemenino.Checked == false)) 
            {
                MessageBox.Show("Campos invalidos, no puede haber ninguno vacio", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (incorrecto == true)
            {
                MessageBox.Show("Campos invalidos, reviselos", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                Business.Entities.Paciente enPaciente = new Business.Entities.Paciente();

                obtengoIDs();
                
                enPaciente.DNI = txtDNI.Text; 
                enPaciente.Nombre = txtNombre.Text; 
                enPaciente.Apellidos = txtApellidos.Text; 
                enPaciente.Telefono = txtTelefono.Text;
                enPaciente.Email = txtEmail.Text; 
                enPaciente.Direccion = txtDireccion.Text;
                enPaciente.Provincia = numprov;
                enPaciente.Ciudad = numciudad;
                enPaciente.ObraSocial =cbObraSocial.Text.ToString();

                if (rdbMasculino.Checked == true) { enPaciente.Sexo = "M"; }
                else if (rdbFemenino.Checked == true) { enPaciente.Sexo = "F"; }

                if (chkPaciente.Checked == true) { enPaciente.Habilitado = true; }
                else { enPaciente.Habilitado = false; }
                
                //LO UTILIZO PARA VALIDAR SI EL USUARIO YA EXISTE.                
                Business.Entities.Paciente enCliPub = new Business.Entities.Paciente();
                cambios = true;
                enCliPub.DNI = txtDNI.Text.ToString();
                                
                if (!enCliPub.ExistePacienteEN(txtDNI.Text))
                {
                    if (btnGuardarCliente.Text.ToString() == "Guardar")
                    {
                        enPaciente.AnyadirPaciente();
                        MessageBox.Show("El Paciente fue registrado con exito", "Informacion", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.Close();
                    } 
                }
                    else
                    {
                        MessageBox.Show("El DNI introducido ya existe");
                    }
                }
        }

        private void obtengoIDs()
        {
            Business.Entities.Paciente enCiu = new Business.Entities.Paciente();
            DataSet dsCiu = new DataSet();
            dsCiu = enCiu.ObtenerListaCiudades(numprov);

            bool parada = false;
            for (int i = 0; i < 7000 && parada != true; i++)
            {
                if (dsCiu.Tables["ciudad"].Rows[i][1].ToString() == cbCiudad.Text.ToString())
                {
                    numciudad = dsCiu.Tables["ciudad"].Rows[i][0].ToString();// en la posicion 0 esta el id de la provincia
                    parada = true;
                }
            }

            MessageBox.Show(numprov + numciudad);
            
        }
        
        #endregion

        #region CBPROVINCIA
        private void cbProvincia_Click(object sender, EventArgs e)
        {
            Business.Entities.Paciente provincia = new Business.Entities.Paciente();
            DataSet dsProv = new DataSet();
            dsProv = provincia.ObtenerListaProvincias();
            ObtenerProvincias(dsProv);
        }

        private void ObtenerProvincias(DataSet dsProv)
        {
            cbProvincia.Text = "Provincias";
            cbProvincia.DataSource = dsProv.Tables["provincia"];
            cbProvincia.DisplayMember = dsProv.Tables["provincia"].Columns[1].Caption.ToString(); // como dsProv lleva el id_prov y el nombre ponemos 1 que es la columna del nombre
        }

        private void cbProvincia_TextChanged(object sender, EventArgs e)
        {
            Business.Entities.Paciente enCiu = new Business.Entities.Paciente();
            DataSet dsCiu = new DataSet();
            try
            {
                if (cbProvincia.SelectedIndex > 0)
                {
                    string prov = cbProvincia.Text.ToString();
                    bool parar = false;
                    for (int i = 0; i < 6000 && parar != true; i++)
                    {
                        if (numProvincia.Tables["provincia"].Rows[i][1].ToString() == prov)
                        {
                            // en la posicion 0 esta el id de la provincia
                            numprov = numProvincia.Tables["provincia"].Rows[i][0].ToString();
                            parar = true;
                            dsCiu = enCiu.ObtenerListaCiudades(numprov);
                        }
                    }
                    ObtenerCiudades(dsCiu);
                }
                else { cbCiudad.SelectedIndex = -1; cbCiudad.DataSource = null; }
            }
            catch (Exception ex)
            {
                // MessageBox.Show("Seleccione primero una provincia", "Cuidado", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void cbProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            Business.Entities.Paciente enCiu = new Business.Entities.Paciente();
            DataSet dsCiu = new DataSet();
            try
            {
                if (cbProvincia.SelectedIndex > 0)
                {

                    //MessageBox.Show("iusdhg");
                    string prov = cbProvincia.Text.ToString();
                    bool parar = false;
                    // MessageBox.Show(numProvincia.Tables["Provincia"].Rows.Count.ToString());
                    for (int i = 0; i < 6000 && parar != true; i++)
                    {
                        //MessageBox.Show(numProvincia.Tables["Provincia"].Rows[i][1].ToString());
                        if (numProvincia.Tables["provincia"].Rows[i][1].ToString() == prov)
                        {
                            numprov = numProvincia.Tables["provincia"].Rows[i][0].ToString();// en la posicion 0 esta el id de la provincia
                            parar = true;
                            dsCiu = enCiu.ObtenerListaCiudades(numprov);

                        }
                    }
                    ObtenerCiudades(dsCiu);
                }
                else { cbCiudad.SelectedIndex = -1; cbCiudad.DataSource = null; }
            }
            catch (Exception ex)
            {
                // MessageBox.Show("Seleccione primero una provincia", "Cuidado", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
        #endregion

        #region CBLOCALIDADES

        private void ObtenerCiudades(DataSet dsCiu)
        {
            cbCiudad.Text = "Seleccione Ciudad";
            cbCiudad.DataSource = dsCiu.Tables["ciudad"];
            cbCiudad.DisplayMember = dsCiu.Tables["ciudad"].Columns[1].Caption.ToString();
        }

        #endregion
        
        #region CBOBRASOCIALES.
        
        private void cbObraSocial_Click(object sender, EventArgs e)
        {
            Business.Entities.Paciente ObraSocial = new Business.Entities.Paciente();
            DataSet dsObraSocial = new DataSet();
            dsObraSocial = ObraSocial.ObtenerListaObraSocial();
            ObtenerObraSocial(dsObraSocial);
        }

        private void ObtenerObraSocial(DataSet dsObraSocial)
        {
            cbObraSocial.Text = "Seleccione su Obra social";
            cbObraSocial.DataSource = dsObraSocial.Tables["ObraSocial"];
            cbObraSocial.DisplayMember = dsObraSocial.Tables["ObraSocial"].Columns[1].Caption.ToString(); // como dsProv lleva el id_prov y el nombre ponemos 1 que es la columna del nombre
        }

        private void cbObraSocial_TextChanged(object sender, EventArgs e)
        {


            Business.Entities.Paciente enObra = new Business.Entities.Paciente();
            DataSet dsObra = new DataSet();
            try
            {
                if (cbObraSocial.SelectedIndex > 0)
                {

                    //MessageBox.Show("iusdhg");
                    string Obra = cbObraSocial.Text.ToString();
                    bool parar = false;
                    //MessageBox.Show(enObra.Tables["ObraSocial"].Rows.Count.ToString());

                    for (int i = 0; i < 6000 && parar != true; i++)
                    {
                        MessageBox.Show(dsObra.Tables["ObraSocial"].Rows[i][1].ToString());
                    }
                }

            }

            catch (Exception ex)
            {
                //MessageBox.Show("Seleccione primero una provincia", "Cuidado", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

        }

        #endregion

        #region AGREGAR CIUDAD
        private void btnAgregarCiudad_Click(object sender, EventArgs e)
        {
           
            if (numprov == null)
            {
                MessageBox.Show("Debe seleccionar una Provincia.");
            }
            else
            {
                MessageBox.Show("PROVINCIA: " + numprov + " Ciudad: " + numciudad);
     
                frmAltaCiudad ac = new frmAltaCiudad(numprov);
                ac.Show();
            }
        }

        #endregion

        #region AGREGAR OS
        private void btnAgregarOS_Click(object sender, EventArgs e)
        {
            frmAltaObraSocial aos = new frmAltaObraSocial();
            aos.Show();
        }

        #endregion

        #region BOTON CERRAR

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        #endregion

        private void prueba_Click(object sender, EventArgs e)
        {
            obtengoIDs();
        }     
        
        private void frmAltaPaciente_Load(object sender, EventArgs e)
        {

        }      
    }

}


            

        

     




      



    
    


       

        




    

